/**
 *  * 这是 LeetCode 第 121. 买卖股票的最佳时机 的解决方案
 *  https://leetcode.cn/problems/best-time-to-buy-and-sell-stock
 */
class BestTimeToBuyAndSellStock {

    /**
     * 方法：maxProfit
     * 功能：计算给定股票价格数组中买卖一次股票能获得的最大利润。
     * 实现逻辑：
     * 1. 初始化两个变量：minPrice 为正无穷大，maxProfit 为 0。
     * 2. 遍历价格数组：
     *    - 如果当前价格小于 minPrice，则更新 minPrice。
     *    - 否则，计算当前价格与 minPrice 的差值，并更新 maxProfit 为两者中的较大值。
     * 时间复杂度：O(n)，其中 n 是价格数组的长度。
     * 空间复杂度：O(1)，只使用了常数级别的额外空间。
     * @param prices
     * @return
     */
    public int maxProfit(int[] prices) {
        int minPrice = Integer.MAX_VALUE;
        int maxProfit = 0;
        for (int price : prices) {
            if (price < minPrice) {
                minPrice = price;
            } else if (price - minPrice > maxProfit) {
                maxProfit = price - minPrice;
            }
        }
        return maxProfit;
    }
}